Elasticsearch-এ Pre-processing এবং Enrichment হলো ডেটা ইন্ডেক্স করার আগে ডেটাকে প্রক্রিয়াজাত করা এবং অতিরিক্ত তথ্য যোগ করার প্রক্রিয়া। Ingest Node এবং Ingest Pipelines ব্যবহার করে Elasticsearch-এ ডেটা ক্লিনিং, ফরম্যাটিং, রূপান্তর এবং এনরিচমেন্ট করা যায়। নিচে Pre-processing এবং Enrichment-এর কয়েকটি বাস্তব উদাহরণ তুলে ধরা হলো:
Pre-processing হলো ডেটা ইন্ডেক্স করার আগে ডেটার গঠন পরিবর্তন করা, অপ্রয়োজনীয় ফিল্ড মুছে ফেলা, বা ফিল্ডের মান সঠিকভাবে সেট করা।
ধরা যাক, লগ ডেটায় "user_ip"
নামে একটি ফিল্ড রয়েছে, যা ইন্ডেক্সে "client_ip"
নামে সংরক্ষণ করতে হবে। Ingest Pipeline-এর মাধ্যমে এটি করা যায়:
PUT /_ingest/pipeline/rename_pipeline
{
"description": "Rename user_ip to client_ip",
"processors": [
{
"rename": {
"field": "user_ip",
"target_field": "client_ip"
}
}
]
}
rename
প্রসেসর ব্যবহার করে "user_ip"
ফিল্ডকে "client_ip"
নামে পরিবর্তন করা হয়েছে।ধরা যাক, আমাদের একটি লগ ডেটা রয়েছে যেখানে "timestamp"
ফিল্ডে তারিখ "MM/dd/yyyy HH:mm:ss"
ফরম্যাটে আছে। আমরা এই তারিখকে "yyyy-MM-dd"
ফরম্যাটে রূপান্তর করতে চাই।
PUT /_ingest/pipeline/date_pipeline
{
"description": "Convert timestamp format",
"processors": [
{
"date": {
"field": "timestamp",
"formats": ["MM/dd/yyyy HH:mm:ss"],
"target_field": "formatted_timestamp",
"output_format": "yyyy-MM-dd"
}
}
]
}
date
প্রসেসর ব্যবহার করে "timestamp"
ফিল্ডের ফরম্যাট পরিবর্তন করা হয়েছে এবং "formatted_timestamp"
নামে একটি নতুন ফিল্ডে সংরক্ষণ করা হয়েছে।কিছু ক্ষেত্রে অপ্রয়োজনীয় ফিল্ড ইন্ডেক্স থেকে মুছে ফেলা জরুরি হতে পারে। ধরা যাক, আমাদের ডকুমেন্টে "temporary_info"
নামে একটি অপ্রয়োজনীয় ফিল্ড আছে, যা ইন্ডেক্সিং-এর সময় মুছে ফেলতে হবে।
PUT /_ingest/pipeline/remove_pipeline
{
"description": "Remove temporary field",
"processors": [
{
"remove": {
"field": "temporary_info"
}
}
]
}
remove
প্রসেসর ব্যবহার করে "temporary_info"
ফিল্ডটি মুছে ফেলা হয়েছে।Enrichment হলো ডেটা ইনডেক্স করার সময় অতিরিক্ত তথ্য যোগ করা। এটি ডেটাকে আরও ইনফরমেটিভ এবং বিশ্লেষণের জন্য উপযুক্ত করে তোলে।
ধরা যাক, আমাদের একটি লগ ডেটা রয়েছে যেখানে "client_ip"
ফিল্ডে ব্যবহারকারীর IP ঠিকানা রয়েছে। আমরা সেই IP ঠিকানার ভিত্তিতে লোকেশন (দেশ, শহর, এবং জিপ কোড) তথ্য যোগ করতে চাই।
PUT /_ingest/pipeline/geoip_enrichment_pipeline
{
"description": "Enrich client IP with GeoIP information",
"processors": [
{
"geoip": {
"field": "client_ip",
"target_field": "geoip"
}
}
]
}
geoip
প্রসেসর ব্যবহার করে "client_ip"
ফিল্ড থেকে লোকেশন তথ্য বের করা হয়েছে এবং "geoip"
নামে একটি ফিল্ডে সংরক্ষণ করা হয়েছে। এতে দেশ, শহর, এবং লোকেশন পয়েন্টের মতো অতিরিক্ত তথ্য অন্তর্ভুক্ত থাকবে।ধরা যাক, ডেটা ইন্ডেক্স করার সময় আমরা প্রতিটি ডকুমেন্টে একটি প্রসেসিং টাইমসট্যাম্প যোগ করতে চাই, যা ডেটা কখন প্রসেস করা হয়েছে তা নির্দেশ করবে।
PUT /_ingest/pipeline/set_pipeline
{
"description": "Set processed_at timestamp",
"processors": [
{
"set": {
"field": "processed_at",
"value": "{{_ingest.timestamp}}"
}
}
]
}
set
প্রসেসর ব্যবহার করে "processed_at"
ফিল্ডে ইনজেস্ট টাইমসট্যাম্প যোগ করা হয়েছে, যা ইন্ডেক্সিং-এর সময় ডেটার প্রসেসিং সময় নির্দেশ করবে।ধরা যাক, আমাদের লগ ডেটায় "message"
নামে একটি ফিল্ড আছে, যা টেক্সট আকারে লগের তথ্য সংরক্ষণ করে। আমরা সেই টেক্সট থেকে IP ঠিকানা, তারিখ, এবং ইভেন্ট টাইপ এক্সট্রাক্ট করতে চাই।
PUT /_ingest/pipeline/grok_pipeline
{
"description": "Extract information from log message",
"processors": [
{
"grok": {
"field": "message",
"patterns": ["%{IP:client_ip} - - \\[%{HTTPDATE:timestamp}\\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{NUMBER:status} %{NUMBER:bytes}"]
}
}
]
}
grok
প্রসেসর ব্যবহার করে "message"
ফিল্ড থেকে বিভিন্ন তথ্য যেমন IP ঠিকানা, লগের সময়সীমা, এবং HTTP মেথড এক্সট্রাক্ট করা হয়েছে এবং ইন্ডেক্সে যোগ করা হয়েছে।Pre-processing এবং Enrichment Elasticsearch-এ ডেটা ইন্ডেক্স করার আগে ডেটাকে প্রিপ্রোসেস এবং এনরিচ করতে ব্যবহৃত হয়। Ingest Node এবং Ingest Pipelines ব্যবহার করে ডেটার গঠন পরিবর্তন করা, অপ্রয়োজনীয় ফিল্ড মুছে ফেলা, এবং অতিরিক্ত তথ্য যোগ করা যায়। এটি ডেটা ইন্ডেক্সিং এবং সার্চ অপারেশনের কার্যকারিতা বাড়াতে সহায়ক, এবং ডেটাকে আরও ইনফরমেটিভ করে তোলে, যা ডেটা অ্যানালাইসিসের জন্য অত্যন্ত গুরুত্বপূর্ণ।
আরও দেখুন...